home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / SpeechSynthesis.p < prev    next >
Encoding:
Text File  |  1998-02-12  |  12.9 KB  |  437 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        SpeechSynthesis.p
  3.  
  4.      Contains:    Speech Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.1
  8.  
  9.      Copyright:    © 1989-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT SpeechSynthesis;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __SPEECHSYNTHESIS__}
  28. {$SETC __SPEECHSYNTHESIS__ := 1}
  29.  
  30. {$I+}
  31. {$SETC SpeechSynthesisIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __MACTYPES__}
  35. {$I MacTypes.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MIXEDMODE__}
  38. {$I MixedMode.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __FILES__}
  41. {$I Files.p}
  42. {$ENDC}
  43.  
  44.  
  45. {$PUSH}
  46. {$ALIGN MAC68K}
  47. {$LibExport+}
  48.  
  49.  
  50. CONST
  51.     kTextToSpeechSynthType        = 'ttsc';
  52.     kTextToSpeechVoiceType        = 'ttvd';
  53.     kTextToSpeechVoiceFileType    = 'ttvf';
  54.     kTextToSpeechVoiceBundleType = 'ttvb';
  55.  
  56.     kNoEndingProsody            = 1;
  57.     kNoSpeechInterrupt            = 2;
  58.     kPreflightThenPause            = 4;
  59.  
  60.     kImmediate                    = 0;
  61.     kEndOfWord                    = 1;
  62.     kEndOfSentence                = 2;
  63.  
  64.  
  65. {------------------------------------------}
  66. { GetSpeechInfo & SetSpeechInfo selectors    }
  67. {------------------------------------------}
  68.     soStatus                    = 'stat';
  69.     soErrors                    = 'erro';
  70.     soInputMode                    = 'inpt';
  71.     soCharacterMode                = 'char';
  72.     soNumberMode                = 'nmbr';
  73.     soRate                        = 'rate';
  74.     soPitchBase                    = 'pbas';
  75.     soPitchMod                    = 'pmod';
  76.     soVolume                    = 'volm';
  77.     soSynthType                    = 'vers';
  78.     soRecentSync                = 'sync';
  79.     soPhonemeSymbols            = 'phsy';
  80.     soCurrentVoice                = 'cvox';
  81.     soCommandDelimiter            = 'dlim';
  82.     soReset                        = 'rset';
  83.     soCurrentA5                    = 'myA5';
  84.     soRefCon                    = 'refc';
  85.     soTextDoneCallBack            = 'tdcb';                        {  use with SpeechTextDoneProcPtr }
  86.     soSpeechDoneCallBack        = 'sdcb';                        {  use with SpeechDoneProcPtr }
  87.     soSyncCallBack                = 'sycb';                        {  use with SpeechSyncProcPtr }
  88.     soErrorCallBack                = 'ercb';                        {  use with SpeechErrorProcPtr }
  89.     soPhonemeCallBack            = 'phcb';                        {  use with SpeechPhonemeProcPtr }
  90.     soWordCallBack                = 'wdcb';
  91.     soSynthExtension            = 'xtnd';
  92.     soSoundOutput                = 'sndo';
  93.  
  94.  
  95. {------------------------------------------}
  96. { Speaking Mode Constants                     }
  97. {------------------------------------------}
  98.     modeText                    = 'TEXT';                        {  input mode constants                      }
  99.     modePhonemes                = 'PHON';
  100.     modeNormal                    = 'NORM';                        {  character mode and number mode constants  }
  101.     modeLiteral                    = 'LTRL';
  102.  
  103.  
  104.     soVoiceDescription            = 'info';
  105.     soVoiceFile                    = 'fref';
  106.  
  107.  
  108.  
  109. TYPE
  110.     SpeechChannel = ^LONGINT;
  111.  
  112.     VoiceSpecPtr = ^VoiceSpec;
  113.     VoiceSpec = RECORD
  114.         creator:                OSType;
  115.         id:                        OSType;
  116.     END;
  117.  
  118.  
  119.  
  120. CONST
  121.     kNeuter                        = 0;
  122.     kMale                        = 1;
  123.     kFemale                        = 2;
  124.  
  125.  
  126.  
  127.  
  128.  
  129. TYPE
  130.     VoiceDescriptionPtr = ^VoiceDescription;
  131.     VoiceDescription = RECORD
  132.         length:                    LONGINT;
  133.         voice:                    VoiceSpec;
  134.         version:                LONGINT;
  135.         name:                    Str63;
  136.         comment:                Str255;
  137.         gender:                    INTEGER;
  138.         age:                    INTEGER;
  139.         script:                    INTEGER;
  140.         language:                INTEGER;
  141.         region:                    INTEGER;
  142.         reserved:                ARRAY [0..3] OF LONGINT;
  143.     END;
  144.  
  145.  
  146.  
  147.     VoiceFileInfoPtr = ^VoiceFileInfo;
  148.     VoiceFileInfo = RECORD
  149.         fileSpec:                FSSpec;
  150.         resID:                    INTEGER;
  151.     END;
  152.  
  153.     SpeechStatusInfoPtr = ^SpeechStatusInfo;
  154.     SpeechStatusInfo = RECORD
  155.         outputBusy:                BOOLEAN;
  156.         outputPaused:            BOOLEAN;
  157.         inputBytesLeft:            LONGINT;
  158.         phonemeCode:            INTEGER;
  159.     END;
  160.  
  161.  
  162.  
  163.     SpeechErrorInfoPtr = ^SpeechErrorInfo;
  164.     SpeechErrorInfo = RECORD
  165.         count:                    INTEGER;
  166.         oldest:                    OSErr;
  167.         oldPos:                    LONGINT;
  168.         newest:                    OSErr;
  169.         newPos:                    LONGINT;
  170.     END;
  171.  
  172.  
  173.  
  174.     SpeechVersionInfoPtr = ^SpeechVersionInfo;
  175.     SpeechVersionInfo = RECORD
  176.         synthType:                OSType;
  177.         synthSubType:            OSType;
  178.         synthManufacturer:        OSType;
  179.         synthFlags:                LONGINT;
  180.         synthVersion:            NumVersion;
  181.     END;
  182.  
  183.  
  184.  
  185.     PhonemeInfoPtr = ^PhonemeInfo;
  186.     PhonemeInfo = RECORD
  187.         opcode:                    INTEGER;
  188.         phStr:                    Str15;
  189.         exampleStr:                Str31;
  190.         hiliteStart:            INTEGER;
  191.         hiliteEnd:                INTEGER;
  192.     END;
  193.  
  194.  
  195.     PhonemeDescriptorPtr = ^PhonemeDescriptor;
  196.     PhonemeDescriptor = RECORD
  197.         phonemeCount:            INTEGER;
  198.         thePhonemes:            ARRAY [0..0] OF PhonemeInfo;
  199.     END;
  200.  
  201.     SpeechXtndDataPtr = ^SpeechXtndData;
  202.     SpeechXtndData = PACKED RECORD
  203.         synthCreator:            OSType;
  204.         synthData:                PACKED ARRAY [0..1] OF Byte;
  205.     END;
  206.  
  207.  
  208.     DelimiterInfoPtr = ^DelimiterInfo;
  209.     DelimiterInfo = PACKED RECORD
  210.         startDelimiter:            PACKED ARRAY [0..1] OF Byte;
  211.         endDelimiter:            PACKED ARRAY [0..1] OF Byte;
  212.     END;
  213.  
  214.  
  215. {$IFC TYPED_FUNCTION_POINTERS}
  216.     SpeechTextDoneProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT; VAR nextBuf: UNIV Ptr; VAR byteLen: UInt32; VAR controlFlags: LONGINT);
  217. {$ELSEC}
  218.     SpeechTextDoneProcPtr = ProcPtr;
  219. {$ENDC}
  220.  
  221. {$IFC TYPED_FUNCTION_POINTERS}
  222.     SpeechDoneProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT);
  223. {$ELSEC}
  224.     SpeechDoneProcPtr = ProcPtr;
  225. {$ENDC}
  226.  
  227. {$IFC TYPED_FUNCTION_POINTERS}
  228.     SpeechSyncProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT; syncMessage: OSType);
  229. {$ELSEC}
  230.     SpeechSyncProcPtr = ProcPtr;
  231. {$ENDC}
  232.  
  233. {$IFC TYPED_FUNCTION_POINTERS}
  234.     SpeechErrorProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT; theError: OSErr; bytePos: LONGINT);
  235. {$ELSEC}
  236.     SpeechErrorProcPtr = ProcPtr;
  237. {$ENDC}
  238.  
  239. {$IFC TYPED_FUNCTION_POINTERS}
  240.     SpeechPhonemeProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT; phonemeOpcode: INTEGER);
  241. {$ELSEC}
  242.     SpeechPhonemeProcPtr = ProcPtr;
  243. {$ENDC}
  244.  
  245. {$IFC TYPED_FUNCTION_POINTERS}
  246.     SpeechWordProcPtr = PROCEDURE(chan: SpeechChannel; refCon: LONGINT; wordPos: UInt32; wordLen: UInt16);
  247. {$ELSEC}
  248.     SpeechWordProcPtr = ProcPtr;
  249. {$ENDC}
  250.  
  251.     SpeechTextDoneUPP = UniversalProcPtr;
  252.     SpeechDoneUPP = UniversalProcPtr;
  253.     SpeechSyncUPP = UniversalProcPtr;
  254.     SpeechErrorUPP = UniversalProcPtr;
  255.     SpeechPhonemeUPP = UniversalProcPtr;
  256.     SpeechWordUPP = UniversalProcPtr;
  257.  
  258. CONST
  259.     uppSpeechTextDoneProcInfo = $0000FFC0;
  260.     uppSpeechDoneProcInfo = $000003C0;
  261.     uppSpeechSyncProcInfo = $00000FC0;
  262.     uppSpeechErrorProcInfo = $00003BC0;
  263.     uppSpeechPhonemeProcInfo = $00000BC0;
  264.     uppSpeechWordProcInfo = $00002FC0;
  265.  
  266. FUNCTION NewSpeechTextDoneProc(userRoutine: SpeechTextDoneProcPtr): SpeechTextDoneUPP;
  267.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  268.     INLINE $2E9F;
  269.     {$ENDC}
  270.  
  271. FUNCTION NewSpeechDoneProc(userRoutine: SpeechDoneProcPtr): SpeechDoneUPP;
  272.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  273.     INLINE $2E9F;
  274.     {$ENDC}
  275.  
  276. FUNCTION NewSpeechSyncProc(userRoutine: SpeechSyncProcPtr): SpeechSyncUPP;
  277.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  278.     INLINE $2E9F;
  279.     {$ENDC}
  280.  
  281. FUNCTION NewSpeechErrorProc(userRoutine: SpeechErrorProcPtr): SpeechErrorUPP;
  282.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  283.     INLINE $2E9F;
  284.     {$ENDC}
  285.  
  286. FUNCTION NewSpeechPhonemeProc(userRoutine: SpeechPhonemeProcPtr): SpeechPhonemeUPP;
  287.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  288.     INLINE $2E9F;
  289.     {$ENDC}
  290.  
  291. FUNCTION NewSpeechWordProc(userRoutine: SpeechWordProcPtr): SpeechWordUPP;
  292.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  293.     INLINE $2E9F;
  294.     {$ENDC}
  295.  
  296. PROCEDURE CallSpeechTextDoneProc(chan: SpeechChannel; refCon: LONGINT; VAR nextBuf: UNIV Ptr; VAR byteLen: UInt32; VAR controlFlags: LONGINT; userRoutine: SpeechTextDoneUPP);
  297.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  298.     INLINE $205F, $4E90;
  299.     {$ENDC}
  300.  
  301. PROCEDURE CallSpeechDoneProc(chan: SpeechChannel; refCon: LONGINT; userRoutine: SpeechDoneUPP);
  302.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  303.     INLINE $205F, $4E90;
  304.     {$ENDC}
  305.  
  306. PROCEDURE CallSpeechSyncProc(chan: SpeechChannel; refCon: LONGINT; syncMessage: OSType; userRoutine: SpeechSyncUPP);
  307.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  308.     INLINE $205F, $4E90;
  309.     {$ENDC}
  310.  
  311. PROCEDURE CallSpeechErrorProc(chan: SpeechChannel; refCon: LONGINT; theError: OSErr; bytePos: LONGINT; userRoutine: SpeechErrorUPP);
  312.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  313.     INLINE $205F, $4E90;
  314.     {$ENDC}
  315.  
  316. PROCEDURE CallSpeechPhonemeProc(chan: SpeechChannel; refCon: LONGINT; phonemeOpcode: INTEGER; userRoutine: SpeechPhonemeUPP);
  317.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  318.     INLINE $205F, $4E90;
  319.     {$ENDC}
  320.  
  321. PROCEDURE CallSpeechWordProc(chan: SpeechChannel; refCon: LONGINT; wordPos: UInt32; wordLen: UInt16; userRoutine: SpeechWordUPP);
  322.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  323.     INLINE $205F, $4E90;
  324.     {$ENDC}
  325. FUNCTION SpeechManagerVersion: NumVersion;
  326.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  327.     INLINE $203C, $0000, $000C, $A800;
  328.     {$ENDC}
  329. FUNCTION MakeVoiceSpec(creator: OSType; id: OSType; VAR voice: VoiceSpec): OSErr;
  330.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  331.     INLINE $203C, $0604, $000C, $A800;
  332.     {$ENDC}
  333. FUNCTION CountVoices(VAR numVoices: INTEGER): OSErr;
  334.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  335.     INLINE $203C, $0108, $000C, $A800;
  336.     {$ENDC}
  337. FUNCTION GetIndVoice(index: INTEGER; VAR voice: VoiceSpec): OSErr;
  338.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  339.     INLINE $203C, $030C, $000C, $A800;
  340.     {$ENDC}
  341. FUNCTION GetVoiceDescription({CONST}VAR voice: VoiceSpec; VAR info: VoiceDescription; infoLength: LONGINT): OSErr;
  342.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  343.     INLINE $203C, $0610, $000C, $A800;
  344.     {$ENDC}
  345. FUNCTION GetVoiceInfo({CONST}VAR voice: VoiceSpec; selector: OSType; voiceInfo: UNIV Ptr): OSErr;
  346.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  347.     INLINE $203C, $0614, $000C, $A800;
  348.     {$ENDC}
  349. FUNCTION NewSpeechChannel(voice: VoiceSpecPtr; VAR chan: SpeechChannel): OSErr;
  350.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  351.     INLINE $203C, $0418, $000C, $A800;
  352.     {$ENDC}
  353. FUNCTION DisposeSpeechChannel(chan: SpeechChannel): OSErr;
  354.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  355.     INLINE $203C, $021C, $000C, $A800;
  356.     {$ENDC}
  357. FUNCTION SpeakString(textToBeSpoken: Str255): OSErr;
  358.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  359.     INLINE $203C, $0220, $000C, $A800;
  360.     {$ENDC}
  361. FUNCTION SpeakText(chan: SpeechChannel; textBuf: UNIV Ptr; textBytes: UInt32): OSErr;
  362.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  363.     INLINE $203C, $0624, $000C, $A800;
  364.     {$ENDC}
  365. FUNCTION SpeakBuffer(chan: SpeechChannel; textBuf: UNIV Ptr; textBytes: UInt32; controlFlags: LONGINT): OSErr;
  366.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  367.     INLINE $203C, $0828, $000C, $A800;
  368.     {$ENDC}
  369. FUNCTION StopSpeech(chan: SpeechChannel): OSErr;
  370.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  371.     INLINE $203C, $022C, $000C, $A800;
  372.     {$ENDC}
  373. FUNCTION StopSpeechAt(chan: SpeechChannel; whereToStop: LONGINT): OSErr;
  374.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  375.     INLINE $203C, $0430, $000C, $A800;
  376.     {$ENDC}
  377. FUNCTION PauseSpeechAt(chan: SpeechChannel; whereToPause: LONGINT): OSErr;
  378.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  379.     INLINE $203C, $0434, $000C, $A800;
  380.     {$ENDC}
  381. FUNCTION ContinueSpeech(chan: SpeechChannel): OSErr;
  382.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  383.     INLINE $203C, $0238, $000C, $A800;
  384.     {$ENDC}
  385. FUNCTION SpeechBusy: INTEGER;
  386.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  387.     INLINE $203C, $003C, $000C, $A800;
  388.     {$ENDC}
  389. FUNCTION SpeechBusySystemWide: INTEGER;
  390.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  391.     INLINE $203C, $0040, $000C, $A800;
  392.     {$ENDC}
  393. FUNCTION SetSpeechRate(chan: SpeechChannel; rate: Fixed): OSErr;
  394.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  395.     INLINE $203C, $0444, $000C, $A800;
  396.     {$ENDC}
  397. FUNCTION GetSpeechRate(chan: SpeechChannel; VAR rate: Fixed): OSErr;
  398.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  399.     INLINE $203C, $0448, $000C, $A800;
  400.     {$ENDC}
  401. FUNCTION SetSpeechPitch(chan: SpeechChannel; pitch: Fixed): OSErr;
  402.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  403.     INLINE $203C, $044C, $000C, $A800;
  404.     {$ENDC}
  405. FUNCTION GetSpeechPitch(chan: SpeechChannel; VAR pitch: Fixed): OSErr;
  406.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  407.     INLINE $203C, $0450, $000C, $A800;
  408.     {$ENDC}
  409. FUNCTION SetSpeechInfo(chan: SpeechChannel; selector: OSType; speechInfo: UNIV Ptr): OSErr;
  410.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  411.     INLINE $203C, $0654, $000C, $A800;
  412.     {$ENDC}
  413. FUNCTION GetSpeechInfo(chan: SpeechChannel; selector: OSType; speechInfo: UNIV Ptr): OSErr;
  414.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  415.     INLINE $203C, $0658, $000C, $A800;
  416.     {$ENDC}
  417. FUNCTION TextToPhonemes(chan: SpeechChannel; textBuf: UNIV Ptr; textBytes: UInt32; phonemeBuf: Handle; VAR phonemeBytes: LONGINT): OSErr;
  418.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  419.     INLINE $203C, $0A5C, $000C, $A800;
  420.     {$ENDC}
  421. FUNCTION UseDictionary(chan: SpeechChannel; dictionary: Handle): OSErr;
  422.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  423.     INLINE $203C, $0460, $000C, $A800;
  424.     {$ENDC}
  425.  
  426.  
  427. {$ALIGN RESET}
  428. {$POP}
  429.  
  430. {$SETC UsingIncludes := SpeechSynthesisIncludes}
  431.  
  432. {$ENDC} {__SPEECHSYNTHESIS__}
  433.  
  434. {$IFC NOT UsingIncludes}
  435.  END.
  436. {$ENDC}
  437.